//import jdk.incubator.vector.FloatVector;
//import jdk.incubator.vector.VectorOperators;
//import jdk.incubator.vector.VectorSpecies;
//
//public class MatrixMultiplicationBenchmark {
//    private static final int SIZE = 512; // 矩阵的大小
//    private static final int REPEAT = 10; // 性能测试的重复次数
//    private static final int WARMUP = 10; // 预热的次数
//    private static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_PREFERRED;
//
//    public static void main(String[] args) {
//        float[][] a = new float[SIZE][SIZE];
//        float[][] b = new float[SIZE][SIZE];
//        float[][] c = new float[SIZE][SIZE];
//
//        // 初始化矩阵 A 和 B
//        initializeMatrix(a);
//        initializeMatrix(b);
//
//        // 预热
//        for (int i = 0; i < WARMUP; i++) {
//            matrixMultiplyVector(a, b, c);
//            matrixMultiplySimple(a, b, c);
//        }
//
//        // 测试 SIMD 矩阵乘法
//        long start = System.nanoTime();
//        for (int i = 0; i < REPEAT; i++) {
//            matrixMultiplyVector(a, b, c);
//        }
//        long end = System.nanoTime();
//        System.out.println("Vector Time: " + (end - start) / REPEAT / 1e6 + " ms");
//
//        // 测试普通矩阵乘法
//        start = System.nanoTime();
//        for (int i = 0; i < REPEAT; i++) {
//            matrixMultiplySimple(a, b, c);
//        }
//        end = System.nanoTime();
//        System.out.println("Simple Time: " + (end - start) / REPEAT / 1e6 + " ms");
//    }
//
//    private static void initializeMatrix(float[][] matrix) {
//        for (int i = 0; i < SIZE; i++) {
//            for (int j = 0; j < SIZE; j++) {
//                matrix[i][j] = i * SIZE + j;
//            }
//        }
//    }
//
//    private static void matrixMultiplyVector(float[][] a, float[][] b, float[][] c) {
//        for (int i = 0; i < SIZE; i++) {
//            for (int j = 0; j < SIZE; j++) {
//                FloatVector vC = FloatVector.zero(SPECIES);
//                for (int k = 0; k < SIZE; k += SPECIES.length()) {
//                    FloatVector vA = FloatVector.fromArray(SPECIES, a[i], k);
//                    FloatVector vB = FloatVector.fromArray(SPECIES, b[j], k);
//                    vC = vA.fma(vB, vC); // Fused Multiply-Add
//                }
//                c[i][j] = vC.reduceLanes(VectorOperators.ADD);
//            }
//        }
//    }
//
//    private static void matrixMultiplySimple(float[][] a, float[][] b, float[][] c) {
//        for (int i = 0; i < SIZE; i++) {
//            for (int j = 0; j < SIZE; j++) {
//                float sum = 0.0f;
//                for (int k = 0; k < SIZE; k++) {
//                    sum += a[i][k] * b[k][j];
//                }
//                c[i][j] = sum;
//            }
//        }
//    }
//}